package model.colisiones;


import java.util.Iterator;
import java.util.List;
import controller.ControladorJuego;

import model.Laberinto;
import model.Pacman;
import model.common.Constantes;
import model.fantasmas.Fantasma;

import ar.uba.fi.algo3.titiritero.ObjetoVivo;

public class Colisiones implements ObjetoVivo {
	
	private Pacman pacman;
	private List<Fantasma> fantasmas;
	private Laberinto laberinto;
	private ControladorJuego controlador;
	
	public Colisiones(Pacman pacman, List<Fantasma> fantasmas,Laberinto laberinto,ControladorJuego controlador){
		
		this.pacman=pacman;
		this.fantasmas=fantasmas;
		this.laberinto=laberinto;
		this.controlador=controlador;
	}

	public void vivir() {
		if(this.laberinto.getPuntosRestantes()==0)this.controlador.pasarNivel(laberinto, pacman);
//		Rectangle rPacman = new Rectangle();
//		Rectangle rFantasma = new Rectangle();
//		rPacman.setBounds(pacman.getX(),pacman.getY(),Constantes.PACMANANCHO,Constantes.PACMANALTO); 
		Iterator<Fantasma> iterator= fantasmas.iterator();
		while(iterator.hasNext()){
			Fantasma fantasmita = iterator.next();
//			rFantasma.setBounds(fantasmita.getX(),fantasmita.getY(),Constantes.FANTASMAANCHO,Constantes.FANTASMAALTO);
			if( (Math.abs(pacman.getX()-fantasmita.getX())<Constantes.ANCHO) && (Math.abs(pacman.getY()-fantasmita.getY())<Constantes.ALTO) ){
				if(fantasmita.isComible()){
					if(fantasmita.isVivo())
						fantasmita.comido();
				}else this.pacmanComido();
			}
		}
	}

	private void pacmanComido() {

		Iterator<Fantasma> iterator= this.fantasmas.iterator();
		while(iterator.hasNext()){
			Fantasma fantasmita = iterator.next();
			fantasmita.reiniciar();
		}
		this.restarVidas();
		this.pacman.reiniciar();
	}

	private void restarVidas() {

		if(this.laberinto.getVidas()==0)this.controlador.detenerJuego();
		else
			this.laberinto.restarVida();		
	}
}
